package main

import (
	"context"
	"os"
	"os/signal"
	"syscall"
	"time"

	"douyin/setup"

	"go.uber.org/zap"
)

func main() {

	// 1.初始化
	err := setup.Init()
	if err != nil {
		zap.L().Fatal("Server Start Failed", zap.Error(err))
	}
	// 2.优雅关机
	// 等待中断信号来优雅地关闭服务器，为关闭服务器操作设置一个5秒的超时
	quit := make(chan os.Signal, 1)
	signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
	<-quit
	zap.L().Info("Shutdown Server ...")
	// 创建一个5秒超时的context
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	// 5秒内优雅关闭服务（将未处理完的请求处理完再关闭服务），超过5秒就超时退出
	if err := setup.Srv.Shutdown(ctx); err != nil {
		zap.L().Fatal("Server Shutdown", zap.Error(err))
	}
	zap.L().Info("Server exiting")
}
